package com.you.raft.core;

import com.you.raft.common.entity.AppendEntryRequest;
import com.you.raft.common.entity.AppendEntryResponse;
import com.you.raft.common.entity.VoteRequest;
import com.you.raft.common.entity.VoteResponse;

/**
 * 一致性模块Consensus
 * 完成投票请求处理以及追加日志的功能
 */
public interface Consensus {
    /**
     * 处理来自其他CANDIDATE节点的投票请求
     */
    VoteResponse requestVote(VoteRequest request);

    /**
     * 追加日志请求:
     * <p>
     * 1.对LEADER心跳的处理(更新上一次心跳时间,更新提交号与应用号,应用日志)
     * <p>
     * 2.处理LEADER追加日志提交(拒绝与前一个日志不一致的日志)
     */
    AppendEntryResponse appendEntry(AppendEntryRequest request);
}
